﻿Imports System.Linq
Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System.Collections.Specialized
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Windows.Data
Imports PTIC_GestionBDD
Imports PTIC_Util
Imports OMANE.Common.UI
Imports System.Windows.Input
Imports OMANE.Common.Model.Interfaces

Namespace ViewModels
    ''' <summary>
    ''' View Model permettant la création des tables de tranche (âges et capitaux)
    ''' </summary>
    ''' <remarks></remarks>
    Public Class ViewModelCmdEncoursRetrait
        Inherits ViewModelCommand
        Implements IViewModelTabSection

        Private _model As ModelTauxGarantis
        Public Property IsClosable As Boolean Implements IViewModelTabSection.IsClosable

#Region "Constructeur"
        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New(ByVal Model As ModelTauxGarantis, ByVal DisplayName As String, ByVal Command As ICommand)
            MyBase.New(DisplayName, Command)
            _model = Model
            Title = "Retraitements"
        End Sub
        Public Sub New()
        End Sub
#End Region

#Region "Propriétés IViewModelTabSection"
        Public Property Icone As String Implements Common.UI.IViewModelTabSection.Icone
        Public Property Title As String Implements Common.UI.IViewModelTabSection.Title
#End Region

#Region "Liste des tables de tranches d'âge"

        Public Event SelectedTrancheAgeChanged As PropertyChangeEventHandler(Of IInfoTableReferentiel)
        Public Event SelectedTrancheAgeChanging As PropertyChangeEventHandler(Of IInfoTableReferentiel)

        Private m_ListeTranchesAge As ReadOnlyCollection(Of IInfoTableReferentiel)
        ''' <summary>
        ''' Liste des tables de tranches d'âge disponibles
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ListeTablesTranchesAge As ReadOnlyCollection(Of IInfoTableReferentiel)
            Get
                If m_ListeTranchesAge Is Nothing Then
                    m_ListeTranchesAge = New ReadOnlyCollection(Of IInfoTableReferentiel)(
                        (From elt In _model.Referentiel.InfoTables
                        Where elt.TypeTable = "TRANCHE_AGE"
                        Select elt).ToList)
                End If
                Return m_ListeTranchesAge
            End Get
        End Property

        ''' <summary>
        ''' Table de tranche retenue par l'utilisateur
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SelectedTrancheAge As IInfoTableReferentiel
            Get
                Dim NomFichier As String
                Dim correspTranchesAges As ChampsTraitTranche = _model.ListeTraitements.TraitTbleEncoursPrep1.ListeChampsSortie.Item(desctrAge)
                If correspTranchesAges.isAttachedToTraitement Then
                    NomFichier = correspTranchesAges.TraitementExtractionTable.FichierBDD.NomRelatif
                Else
                    NomFichier = "trAgeTemp.sas7bdat"
                End If
                Dim Result As IInfoTableReferentiel = _
                    (From elt In _model.Referentiel.InfoTables
                    Where elt.NomFichier = NomFichier
                    Select elt).AsEnumerable.FirstOrDefault
                Return Result
            End Get
            Set(ByVal value As IInfoTableReferentiel)
                Try
                    OnPropertyChanging("SelectedTrancheAge")
                    Dim newNomFichierTrAge As String = value.NomFichier
                    Dim e As New PropertyChangeEventArgs(Of IInfoTableReferentiel)(SelectedTrancheAge, value)
                    If e.IsValide Then RaiseEvent SelectedTrancheAgeChanging(Me, e)

                    If e.IsValide Then
                        Dim correspTranchesAges As ChampsTraitTranche = _model.ListeTraitements.TraitTbleEncoursPrep1.ListeChampsSortie.Item(desctrAge)
                        If newNomFichierTrAge = "trAgeTemp.sas7bdat" Then
                            correspTranchesAges.isAttachedToTraitement = False
                        Else
                            If Not newNomFichierTrAge Is Nothing Then
                                If correspTranchesAges.isAttachedToTraitement = False Then
                                    correspTranchesAges.isAttachedToTraitement = True
                                    correspTranchesAges.TraitementExtractionTable.FichierBDD.NomComplet = csteEmplacementReferentiel & newNomFichierTrAge
                                    correspTranchesAges.TraitementExtractionTable.FichierBDD.GenererNomCompletChanged()
                                Else
                                    correspTranchesAges.TraitementExtractionTable.FichierBDD.NomComplet = csteEmplacementReferentiel & newNomFichierTrAge
                                End If
                            End If
                            OnPropertyChanged("TableTranchesAge")
                        End If
                        OnPropertyChanged("SelectedTrancheAge")
                        RaiseEvent SelectedTrancheAgeChanged(Me, e)
                    End If

                Catch ex As Exception
                    If _model.Connection.Connection.State <> ConnectionState.Closed Then
                        _model.Connection.Connection.Close()
                    End If
                    OnPropertyChanged("TableTranchesAge")
                    OnPropertyChanged("SelectedTrancheAge")
                End Try
            End Set
        End Property

#End Region

#Region "Liste des tables de tranches de capitaux"

        Private m_ListeTranchesCapi As ReadOnlyCollection(Of IInfoTableReferentiel)
        Public ReadOnly Property ListeTablesTranchesCapi As ReadOnlyCollection(Of IInfoTableReferentiel)
            Get
                If m_ListeTranchesCapi Is Nothing Then
                    m_ListeTranchesCapi = New ReadOnlyCollection(Of IInfoTableReferentiel)(
                        (From elt In _model.Referentiel.InfoTables
                        Where elt.TypeTable = "TRANCHE_CAPINI"
                        Select elt).ToList)
                End If
                Return m_ListeTranchesCapi
            End Get
        End Property
        Public Property SelectedTrancheCapi As IInfoTableReferentiel
            Get
                Dim NomFichier As String
                Dim correspTranchesCapi As ChampsTraitTranche = _model.ListeTraitements.TraitTbleEncoursPrep1.ListeChampsSortie.Item("Tranche de capitaux")
                If correspTranchesCapi.isAttachedToTraitement Then
                    NomFichier = correspTranchesCapi.TraitementExtractionTable.FichierBDD.NomRelatif
                Else
                    NomFichier = "trCapiTemp.sas7bdat"
                End If
                Dim Result As IInfoTableReferentiel = _
                    (From elt In _model.Referentiel.InfoTables
                    Where elt.NomFichier = NomFichier
                    Select elt).AsEnumerable.FirstOrDefault
                Return Result
            End Get
            Set(ByVal value As IInfoTableReferentiel)
                Try
                    OnPropertyChanging("SelectedTrancheCapi")
                    Dim newNomFichierTrCapi As String = value.NomFichier
                    Dim e As New PropertyChangeEventArgs(Of IInfoTableReferentiel)(SelectedTrancheCapi, value)
                    If e.IsValide Then RaiseEvent SelectedTrancheCapiChanging(Me, e)

                    If e.IsValide Then
                        Dim correspTranchesCapi As ChampsTraitTranche = _model.ListeTraitements.TraitTbleEncoursPrep1.ListeChampsSortie.Item("Tranche de capitaux")
                        If newNomFichierTrCapi = "trCapiTemp.sas7bdat" Then
                            correspTranchesCapi.isAttachedToTraitement = False
                        Else
                            If Not newNomFichierTrCapi Is Nothing Then
                                If correspTranchesCapi.isAttachedToTraitement = False Then
                                    correspTranchesCapi.isAttachedToTraitement = True
                                    correspTranchesCapi.TraitementExtractionTable.FichierBDD.NomComplet = csteEmplacementReferentiel & newNomFichierTrCapi
                                    correspTranchesCapi.TraitementExtractionTable.FichierBDD.GenererNomCompletChanged()
                                Else
                                    correspTranchesCapi.TraitementExtractionTable.FichierBDD.NomComplet = csteEmplacementReferentiel & newNomFichierTrCapi
                                End If
                            End If
                            OnPropertyChanged("TableTranchesCapi")
                        End If
                        OnPropertyChanged("SelectedTrancheCapi")
                        RaiseEvent SelectedTrancheCapiChanged(Me, e)
                    End If

                Catch ex As Exception
                    If _model.Connection.Connection.State <> ConnectionState.Closed Then
                        _model.Connection.Connection.Close()
                    End If
                    OnPropertyChanged("TableTranchesCapi")
                    OnPropertyChanged("SelectedTrancheCapi")
                End Try
            End Set
        End Property

        Public Event SelectedTrancheCapiChanged As PropertyChangeEventHandler(Of IInfoTableReferentiel)
        Public Event SelectedTrancheCapiChanging As PropertyChangeEventHandler(Of IInfoTableReferentiel)
#End Region

#Region "Table des tranches d'âge"
        ''' <summary>
        ''' Table des tranches d'âge
        ''' </summary>
        ''' <remarks></remarks>
        Public ReadOnly Property TableTranchesAge() As System.Data.DataTable
            Get
                Dim correspTranchesAges As ChampsTraitTranche = _model.ListeTraitements.TraitTbleEncoursPrep1.ListeChampsSortie.Item(desctrAge)
                Return correspTranchesAges.TableTranches
            End Get
        End Property
        
        ''' <summary>
        ''' ToolTip table des tranches d'âge
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ToolTipTableTranchesAge As String
            Get
                Return "L'âge indiqué dans la colonne maxTrAge est EXCLU de la tranche." & vbCrLf & _
                       "Il sera inclu dans la tranche immédiatement supérieure si elle existe." & vbCrLf & _
                       "Par exemple, pour une tranche ayant maxTrAge=35, un individu ayant " & _
                       "34,9 ans sera inclus tandis qu'un individu ayant 35,1 ans sera exclu."
            End Get
        End Property
#End Region

#Region "Table des tranches de capitaux"
        ''' <summary>
        ''' Table des tranches de capitaux
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TableTranchesCapi() As System.Data.DataTable
            Get
                Dim correspTranchesCapi As ChampsTraitTranche = _model.ListeTraitements.TraitTbleEncoursPrep1.ListeChampsSortie.Item("Tranche de capitaux")
                Return correspTranchesCapi.TableTranches
            End Get
        End Property

        ''' <summary>
        ''' ToolTip table des tranches de capitaux
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ToolTipTableTranchesCapi As String
            Get
                Return "Les capitaux indiqués dans la colonne maxTrCapi sont EXCLUS de la tranche." & vbCrLf & _
                       "Il seront inclus dans la tranche immédiatement supérieure si elle existe." & vbCrLf & _
                       "Par exemple, pour une tranche ayant maxTrCapi=1 000 000, un individu ayant un capital initial assuré de 999 999 sera inclu dans la ttranche tandis qu'un individu ayant un capital de 1 000 001 sera exclu."
            End Get
        End Property
#End Region

    End Class
End Namespace
